iT邦幫忙

2026 iThome 鐵人賽

DAY 3
0
Software Development

從像素到 Computer Vision:30 天理解數位影像處理系列 第 3

Day 3 | Pixel、Resolution、Color Depth:一張圖片到底是怎麼組成的?

  • 分享至 

  • xImage
  •  

相信大家一定都有這種經驗。

把一張照片一直放大、一直放大,最後會發現圖片開始變得模糊,甚至可以看到一格一格的小方塊。

以前看到這個現象,第一個直覺就是:「喔解析度太低了。」

但仔細想想,其實還有很多問題沒有回答。

那些一格一格的小方塊到底是什麼?

我們都知道的解析度,又到底代表什麼?

還有我們常聽到的 8-bit、24-bit、Color Depth 又是在描述什麼?

這些名詞常常一起出現,搞得頭都昏了。

https://ithelp.ithome.com.tw/upload/images/20260820/20181780uJWMTANoLG.png

所以今天想說把它們整理在一起來探討。

Pixel:影像最小的單位

Pixel(像素)可以想成一張圖片最小的組成單位。

如果把一張圖片放大到足夠大,就可以看到很多一格一格的小方塊,而每一個小方塊,就是一個 Pixel。

對電腦來說,每個 Pixel 都會記錄一些數值。

如果是灰階圖片,它可能只需要一個數值,例如:

120

代表這個位置的亮度。

如果是彩色圖片,就需要三個數值:

R = 255
G = 128
B = 32

代表這個 Pixel 的紅、綠、藍三個通道。

因此,一張圖片其實就是:

很多很多 Pixel 排列成一個矩陣。

實作:用 NumPy 建立一張只有 5×5 的圖片

知道圖片是怎麼組成之後,我們就可以自己建立一張超小的灰階圖片。

import numpy as np
import matplotlib.pyplot as plt

img = np.array([
    [0,  64, 128, 192, 255],
    [0,  64, 128, 192, 255],
    [0,  64, 128, 192, 255],
    [0,  64, 128, 192, 255],
    [0,  64, 128, 192, 255]
], dtype=np.uint8)

plt.imshow(img, cmap="gray")
plt.axis("off")
plt.show()

來看一下跑出來的結果:
https://ithelp.ithome.com.tw/upload/images/20260820/20181780Jr3DvRWv1q.png

雖然只有 25 個 Pixel,但它已經是一張合法的圖片。

如果把它放大來看,就會很明顯看到一格一格的樣子。

Resolution:圖片到底有多少 Pixel?

當我們說:

「這張圖片是 1920 × 1080」

真正代表的是:

  • 水平方向有 1920 個 Pixel
  • 垂直方向有 1080 個 Pixel

因此整張圖片共有:

1920 × 1080 = 2,073,600 Pixels

也就是大約 207 萬個 Pixel。

所以 Resolution 並不是在描述圖片有多大,而是在描述圖片包含多少個 Pixel。

Pixel 越多,通常可以呈現越多細節。

實作:比較不同 Resolution

下面建立三張不同大小的圖片。

sizes = [32, 128, 512]

fig, axes = plt.subplots(1, 3, figsize=(9,3))

for ax, size in zip(axes, sizes):
    img = np.random.randint(0, 256, (size, size), dtype=np.uint8)
    ax.imshow(img, cmap="gray")
    ax.set_title(f"{size}×{size}")
    ax.axis("off")

plt.show()

跑出來應改長這樣:
https://ithelp.ithome.com.tw/upload/images/20260820/20181780KiXUV3pWqT.png

如果只是看原始圖片,可能不容易感受到差異。

但把它們放大之後,高解析度的圖片通常會保留更多細節。

Color Depth:每個 Pixel 可以記錄多少資訊?

如果 Pixel 是圖片的格子,那 Color Depth 就是每個格子可以存放多少資訊。

最常見的是 8-bit。

8-bit 可以表示:

2^8 = 256

也就是:

0 ~ 255

因此灰階圖片通常都是:

  • 0:黑色
  • 255:白色
  • 中間代表不同亮度

如果是 RGB 彩色圖片。

每個通道都是 8-bit。

因此:

R:256 種

G:256 種

B:256 種

總共可以表示:

256 × 256 × 256 = 16,777,216 種顏色

也就是常見的 24-bit True Color。

實作:觀察不同 Color Depth

下面的程式碼會建立一張漸層圖片。

gradient = np.linspace(0, 255, 256, dtype=np.uint8)
gradient = np.tile(gradient, (50, 1))

plt.imshow(gradient, cmap="gray")
plt.axis("off")
plt.show()

https://ithelp.ithome.com.tw/upload/images/20260820/201817805FnElgDl1N.png

接著把它降低成只有 4-bit。

img_4bit = (gradient // 16) * 16

plt.imshow(img_4bit, cmap="gray")
plt.axis("off")
plt.show()

https://ithelp.ithome.com.tw/upload/images/20260820/20181780jdP8jCRWu8.png

可以發現漸層開始變得不連續。

這就是 Color Depth 降低之後,能表示的亮度變少所造成的現象。

今日總結

今天我們整理了三個很容易混在一起的名詞。

  • Pixel:組成圖片最小的單位。
  • Resolution:圖片包含多少個 Pixel。
  • Color Depth:每個 Pixel 能記錄多少資訊。

這三個概念很基礎,後面不管是影像處理、Computer Vision,甚至深度學習,都會一直遇到它們。

下一篇,我想來整理另一組也很常一起出現的名詞:

RGB、Gray 與 HSV。


上一篇
Day 2 | 電腦到底是怎麼「看見」一張圖片的?
下一篇
Day 4 | RGB、Gray、HSV:電腦是怎麼表示顏色的?
系列文
從像素到 Computer Vision:30 天理解數位影像處理5
圖片
  熱門推薦
圖片
{{ item.channelVendor }} | {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言